<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6和ES7新增的数组方法</title>
</head>
<body>
<p>copyWithin 复制数组中一系列元素到同一数组指定的起始位置</p>
<p>includes 如果数组中存在某个元素则返回true，否则返回false。ES7新增</p>
<p>find 根据回调函数给定的条件从数组中查找元素，如果找到则返回该元素</p>
<p>findIndex 根据回调函数给定的条件从数组中查找元素，如果找到则返回该元素在数组中的索引</p>
<p>fill 用静态值填充数组</p>
<p>from 根据已有数组创建一个新数组</p>
<p>of 根据传入的参数创建一个新数组</p>
<script type="text/javascript">
    var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
    /***********************************************************************************************************/
    // 使用from方法
    // Array.from方法根据已有的数组创建一个新数组。比如，要复制numbers数组，可以这样做：
    let numbers2 = Array.from(numbers);
    console.log(numbers2)
    // 还可以传入一个用来过滤值的函数，例子如下：
    let evens = Array.from(numbers, x => (x % 2 == 0));
    console.log(evens)
    // 上面的代码会创建一个evens数组，其中只包含numbers数组中的偶数。
    /***********************************************************************************************************/
    // 使用Array.of方法
    // Array.of方法根据传入的参数创建一个新数组
    let numbers3 = Array.of(1);
    let numbers4 = Array.of(1, 2, 3, 4, 5, 6);
    // 它和下面这段代码的效果一样：
    // let numbers3 = [1];
    // let numbers4 = [1, 2, 3, 4, 5, 6];
    // 我们也可以用这个方法复制已有的数组，比如：
    let numbersCopy = Array.of(...numbers4);
    console.log(numbersCopy);
    //上面的代码和Array.from(numbers4)的效果是一样的，区别只是用到了第1章讲过的展开操作符。
    // 展开操作符（...）会把numbers4数组里的值都展开成参数。
    /***********************************************************************************************************/
    // 使用fill方法
    // fill方法用静态值填充数组
    numbersCopy.fill(0);
    console.log(numbersCopy);
    // numbersCopy数组所有位置的值都会变成0（[0, 0, 0, 0, 0, 0]）。
    // 我们还可以指定开始填充的索引，如下：
    numbersCopy.fill(2, 1);
    console.log(numbersCopy);
    // 上面的例子里，数组中从1开始的所有位置，值都是2（[0, 2, 2, 2, 2, 2]）。
    // 同样，也可以指定结束填充的索引：
    numbersCopy.fill(1, 3, 5);
    console.log(numbersCopy);
    // 上面的例子里，我们会把1填充到数组索引3到5的位置（不包括5），得到的数组为[0, 2, 2,1, 1, 2]。
    // 创建数组并初始化值的时候，fill方法非常好用，就像下面这样：
    let ones = Array(6).fill(1);
    // 上面的代码创建了一个长度为6，所有的值都是1的数组（[1, 1, 1, 1, 1, 1]）。
    /***********************************************************************************************************/
    // 使用copyWithin方法
    // copyWithin方法复制数组中的一系列元素到同一数组指定的起始位置
    let copyArray = [1, 2, 3, 4, 5, 6];
    // 假如我们想把4、5、6三个值复制到数组前三个位置，得到[4, 5, 6, 4, 5, 6]这个数组。可以用下面的代码达到目的：
    copyArray.copyWithin(0, 3);
    console.log(copyArray)
    // 假如我们想把4、5两个值（位置3和4）复制到位置1和2，可以这样做：
    copyArray = [1, 2, 3, 4, 5, 6];
    copyArray.copyWithin(1, 3, 5);
    console.log(copyArray)
    // 这种情况下，会把从位置3开始到位置5结束（不包括5）的元素复制到位置1，结果是得到数组[1, 4, 5, 4, 5, 6]。
    /***********************************************************************************************************/
</script>
</body>
</html>
